package com.itheima.wisdomnext.service;

import com.itheima.wisdomnext.entity.*;
import com.itheima.wisdomnext.entity.Result.ResponseResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface PostService {

    /**
     * 创建新帖子并处理文件上传
     *
     * @param post 新创建的帖子对象
     * @param files 附件文件（如图片、视频等）
     * @param type 帖子的类型（如问答帖、普通帖等）
     * @param title 帖子标题
     * @param nestedArray 嵌套数组，用于附加的额外信息
     * @return 创建的帖子对象
     */
    Post createPost(Post post, MultipartFile[] files, String type, String title, String[] nestedArray);

    /**
     * 根据帖子的 ID 获取帖子信息
     *
     * @param id 帖子 ID
     * @return 包含帖子信息的统一响应结果
     */
    ResponseResult<List<Postshow>> getPostById(int id);

    /**
     * 根据帖子 ID 和用户 ID 获取帖子的详细信息（包括图片、作者等）
     *
     * @param pid 帖子 ID
     * @param userId 当前登录用户的 ID（用于判断是否点赞等）
     * @return 包含帖子的详细信息的统一响应结果
     */
    ResponseResult<Postshow> getPostShowBypId(int pid, Long userId);

    /**
     * 根据用户 ID 获取该用户可见的帖子列表
     *
     * @param userId 当前用户的 ID
     * @return 当前用户可见的帖子列表
     */
    List<Postshow> getVisiblePostsForUser(Long userId); // 新增：根据 id 查询帖子

    /**
     * 更新帖子的审核状态
     *
     * @param post 帖子对象（包含新状态）
     */
    void updatePostStatus(Post post);

    /**
     * 获取当前用户关注的所有人的帖子列表
     *
     * @param userId 当前用户的 ID
     * @return 当前用户关注的所有用户的帖子列表
     */
    List<Postshow> getFollowedUsersPosts(int userId);

    /**
     * 判断当前用户是否点赞该帖子
     *
     * @param postId 帖子 ID
     * @param userId 当前用户的 ID
     * @return 是否点赞（true/false）
     */
    boolean isPostLikedByUser(int postId, int userId);

    /**
     * 根据问答帖子的 ID 获取问答帖子
     *
     * @param questionPostId 问答帖子的 ID
     * @return 对应的问答帖子对象
     */
    QaPost getQaPostById(Long questionPostId);

    /**
     * 根据问题 ID 查询所有选项
     *
     * @param questionId 问题 ID
     * @return 该问题的所有选项
     */
    List<QaAnswerOption> getOptionsByQuestionId(int questionId);

    /**
     * 获取最近发布的前10条话题或帖子（按时间排序）
     *
     * @return 最近发布的前10条话题或帖子列表
     */
    List<PostTopic> getRecentPostsOrTopics();

    /**
     * 更新帖子的可见性（公开、粉丝可见等）
     *
     * @param postId 帖子 ID
     * @param visibility 可见性（如 "public", "private", "friends", "followers" 等）
     * @return 更新结果的响应
     */
    ResponseResult updatePostVisibility(Long postId, String visibility);

    /**
     * 获取用户点赞的所有帖子
     *
     * @param userId 用户 ID
     * @return 用户点赞的帖子列表
     */
    List<Postshow> getLikedPostsByUser(int userId);
}
